home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Supervisor's Toolkit
/
Network Supervisor's Toolkit.iso
/
tools
/
lu62
/
proc
/
frecw.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-10
|
2KB
|
88 lines
/*
* CopyRight 1995. Nicholas Poljakov all rights reserved.
*/
#include <malloc.h>
#include <stdio.h>
#include <dos.h>
#include <recwait.h>
#include <state1.h>
recwait (tp_id,
conv_id,
fill,
p_rc,
length,
max_length,
p_rts,
p_data,
p_wr)
unsigned char *tp_id;
unsigned long conv_id;
unsigned char fill;
unsigned int *length ;
unsigned int max_length;
unsigned char *p_rts;
char far *p_data;
unsigned char *p_wr;
struct rc {
unsigned int prim ;
unsigned long sec ; } *p_rc;
{
union REGS inregs,outregs;
struct SREGS segregs;
struct rcwait *ptr;
int l,i;
char _near *dp1;
char _near *dp2;
char *p;
l = sizeof(struct rcwait);
if ((ptr = (char *)calloc(1,l)) == NULL)
{
p_rc->prim = PORT_BUSY; /* ¡ÑΓ ñ«ßΓπ»¡«⌐ »á¼∩Γ¿ */
p_rc->sec = 0x00;
return(0);
}
ptr->code=Receive_and_wait; /* code primitiv */
ptr->e_cd=0x0000; /* ex */
memcpy(ptr->tp_id,tp_id,8);
ptr->conv_id = conv_id;
ptr->fill = fill;
ptr->maxlen=max_length;
ptr->data_lt=*length;
ptr->data_addr=p_data;
/*
inregs.x.dx = FP_OFF(ptr);
segregs.ds = FP_SEG(ptr);
inregs.x.ax = ptr->code;
int86x(0x68,&inregs,&outregs,&segregs);
*/
dp1 = FP_OFF( ptr );
dp2 = FP_SEG( ptr );
_asm
{
push ds
mov dx, word ptr dp1[0]
mov ax, word ptr dp2[0]
mov ds, ax
mov ax, Receive_and_wait
int 68h
pop ds
}
*p_wr = ptr->what_received;
*length = ptr->data_lt;
*p_rts = ptr->rts;
p_rc->prim = ptr->prim_rc;
p_rc->sec = ptr->sec_rc;
free(ptr);
return(0);
}